package cap7;
import javax.swing.border.BevelBorder;
import javax.swing.border.LineBorder;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.event.*;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;

import cap5.M111;

public class GUI_M111 extends JFrame {
	//Atributo de la Aplicacion
	private M111  me;
	//Atributos Gráficos
	private Container pc;	
	private JPanel panelBotones, panelES, panelRetirar, panelEmpleado;
	private JLabel cartelBebida;
	private BotonME botonCafe, botonCafeConLeche,botonSubmarino;
	private JButton botonRetirarInfusion;
	private JButton botonEmpleado;

	public GUI_M111(M111 m)  {	
		super("Maquina "+m.obtenerNroSerie());
		me = m;
		pc = this.getContentPane();
		armarPaneles();
		armarBotones();
		armarEtiquetas();
		insertarComponentes();
	}

	private void armarPaneles() {   
		//Captura el panel de contenido y establece su layout
		BoxLayout layoutPc =new BoxLayout(pc,BoxLayout.Y_AXIS);
		pc.setLayout(layoutPc);
		//Crea los paneles y establece su layout y apariencia
		panelBotones = new JPanel();
		GridLayout panelBotonesLayout = new GridLayout(3, 1);
		panelBotonesLayout.setHgap(5);
		panelBotonesLayout.setVgap(5);
		panelBotones.setLayout(panelBotonesLayout);				
		panelBotones.setPreferredSize(new Dimension(392, 320));
		panelBotones.setSize(369, 250);
		panelBotones.setBackground(new Color(235,235,235));
		panelES = new JPanel();			
		panelES.setPreferredSize(new Dimension(392, 101));
		panelES.setSize(369, 51);
		panelES.setBorder(BorderFactory.createBevelBorder
				(BevelBorder.LOWERED));
		panelRetirar = new JPanel();
		panelRetirar.setPreferredSize(new Dimension(392, 50));
		panelEmpleado = new JPanel();			
		panelEmpleado.setPreferredSize(new Dimension(392, 101));
		panelEmpleado.setSize(369, 80);
		panelEmpleado.setBackground(new Color(235,235,235));    
		panelEmpleado.setBorder(BorderFactory.createBevelBorder
				(BevelBorder.LOWERED));
	}

	private void armarBotones() {
		//Crea el boton de cafe, crea el oyente y lo registra
		botonCafe = new BotonME("Café");	
		OyenteCafe oCafe = new OyenteCafe();
		botonCafe.addActionListener(oCafe);
		//Crea el boton de cafe con Leche, crea el oyente y lo registra
		botonCafeConLeche = new BotonME("Café con Leche");
		OyenteCafeConLeche oCafeConLeche = new OyenteCafeConLeche();
		botonCafeConLeche.addActionListener(oCafeConLeche);
		//Crea el boton de submarino,  crea el oyente y lo registra
		botonSubmarino = new BotonME("Submarino");
		OyenteSubmarino oSubmarino = new OyenteSubmarino();
		botonSubmarino.addActionListener(oSubmarino);		
		//Crea el boton del Empleado,  crea el oyente y lo registra
		botonEmpleado = new BotonME("Empleado");	
		botonEmpleado.setBackground(Color.BLUE);
		botonEmpleado.setPreferredSize(new Dimension(200, 76));
		botonEmpleado.setSize(180, 36);
		OyenteEmpleado oEmpleado = new OyenteEmpleado();
		botonEmpleado.addActionListener(oEmpleado);	
		//Crea el boton del retirar,  crea el oyente y lo registra
		botonRetirarInfusion = new JButton();
		botonRetirarInfusion.setText("Retire su infusión");
		botonRetirarInfusion.setEnabled(false);
		botonRetirarInfusion.setFont(new Font("SansSerif",1,14));
		botonRetirarInfusion.setBorder(BorderFactory.createEtchedBorder
				(BevelBorder.LOWERED));
		botonRetirarInfusion.setPreferredSize(new Dimension(360, 32));
		OyenteRetirar oRetirar = new OyenteRetirar();
		botonRetirarInfusion.addActionListener(oRetirar);
	}	
	private void armarEtiquetas() {	
		//Crea las etiquetas y establece sus atributos
		cartelBebida = new JLabel();
		cartelBebida.setLayout(new FlowLayout());				
		cartelBebida.setBorder(new LineBorder 
				(new Color(0,0,0), 1, false));
		cartelBebida.setPreferredSize(new Dimension(277, 45));
		cartelBebida.setHorizontalAlignment(SwingConstants.CENTER);
		cartelBebida.setHorizontalTextPosition(SwingConstants.LEFT);
		cartelBebida.setFont(new Font("Arial",0,14));
	}
	private void insertarComponentes() {
		//Inserta las componentes en los paneles	
		panelBotones.add(botonCafe);
		panelBotones.add(botonCafeConLeche);
		panelBotones.add(botonSubmarino);
		pc.add(panelBotones);
		panelES.add(cartelBebida);
		pc.add(panelES);		
		panelRetirar.add(botonRetirarInfusion);	
		pc.add(panelRetirar);
		panelEmpleado.add(botonEmpleado);
		pc.add(panelEmpleado);				
	}

	private void deshabilitarBotones(){
		botonCafe.setEnabled(false);
		botonCafeConLeche.setEnabled(false);
		botonSubmarino.setEnabled(false);
		botonRetirarInfusion.setEnabled(true);
		botonEmpleado.setEnabled(false);
	}	   
	private void habilitarBotones(){
		botonCafe.setEnabled(true);
		botonCafeConLeche.setEnabled(true);
		botonSubmarino.setEnabled(true);
		botonRetirarInfusion.setEnabled(false);
		botonEmpleado.setEnabled(true);
	}

	class OyenteCafe implements ActionListener{	
		public void actionPerformed(ActionEvent evt) {
			//prepara el cafe si la cantidad de ingredientes lo permite
			int cantVasos = me.vasosCafe();
			if (cantVasos>=1){
				me.cafe();
				cartelBebida.setText("Aquí tiene su café");
			}
			else 
				cartelBebida.setText("No puede preparar café");
			deshabilitarBotones();			
		}	
	}
	class OyenteCafeConLeche implements ActionListener {
		public void actionPerformed(ActionEvent evt) {
			//prepara el cafe con leche si la cantidad de ingredientes lo permite
			int cantVasos = me.vasosCafeConLeche();
			if (cantVasos>=1){
				me.cafeConLeche();
				cartelBebida.setText("Aquí tiene su café con leche");
			}
			else 
				cartelBebida.setText("No puede preparar café con leche");
			deshabilitarBotones();			
		}
	}
	class OyenteSubmarino implements ActionListener {
		public void actionPerformed(ActionEvent evt) {
			//Solo prepara el submarino si la cantidad de ingredientes lo permite
			int cantVasos = me.vasosSubmarino();
			if (cantVasos>=1){
				me.submarino();
				cartelBebida.setText("Aquí tiene su submarino");
			}
			else 
				cartelBebida.setText("No puede preparar submarino");
			deshabilitarBotones();			
		}
	}
	class OyenteRetirar implements ActionListener {
		public void actionPerformed(ActionEvent evt) {
			cartelBebida.setText("");;
			habilitarBotones();
		}
	}

	class OyenteEmpleado implements ActionListener{	   
		public void actionPerformed(ActionEvent evt) {

			JOptionPane dialogo = new JOptionPane(); 
			int c = me.obtenerMaxCafe()-me.cargarCafe(me.obtenerMaxCafe());
			int a = me.obtenerMaxCacao()-
					me.cargarCacao(me.obtenerMaxCacao());      
			int l = me.obtenerMaxLeche()-
					me.cargarLeche(me.obtenerMaxLeche());     
			dialogo.showMessageDialog(null,"Se cargo "+c+" grs cafe " +a+" grs cacao "+l+" grs leche ",
					"Maquina cargada",JOptionPane.INFORMATION_MESSAGE);               
		}	
	}
	
	public static void main(String[] args) {
		(new GUI_M111(new M111(100))).setVisible(true);
	}
}
